package savet.gui.modelos;

import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import javax.swing.AbstractListModel;
import javax.swing.JList;
import savet.entidades.atributos.Legenda;

public class ListaLegendaModel extends AbstractListModel {

    private List<Legenda> legendas = new LinkedList<Legenda>();
    private Set<Integer> selecionadas = new HashSet<Integer>();

    public void addLegenda(Legenda legenda) {
        if (!legendas.contains(legenda)) {
            int indice = legendas.size();
            legendas.add(legenda);
            fireIntervalAdded(this, indice, indice);
        }
    }

    public void removeLegenda(Legenda legenda) {
        if (legendas.contains(legenda)) {
            int index = legendas.indexOf(legenda);
            legendas.remove(legenda);
            removeSelecaoLegenda(index);
            fireIntervalRemoved(this, index, index);
        }
    }

    public int getSize() {
        return legendas.size();
    }

    public Object getElementAt(int index) {
        return legendas.get(index);
    }

    public int indexOf(Legenda legenda) {
        return legendas.indexOf(legenda);
    }

    public void limpar() {
        legendas.clear();
    }

    /**
     * Informa ao modelo qual legenda esta selecionada no {@link JList}
     * @param index
     */
    public void setSelecaoLegenda(int index) {
        if (!selecionadas.contains(index))
            selecionadas.add(index);
        else
            removeSelecaoLegenda(index);
    }

    /**
     * Informa ao modelo qual legenda nao esta selecionada no {@link JList}
     * @param index
     */
    public void removeSelecaoLegenda(int index) {
        selecionadas.remove(index);
    }

    /**
     * Retorna a lista de legendas selecionadas no {@link JList}
     * @param index
     */
    public Set getSelecoesLegendas(int index) {
        return selecionadas;
    }

    /**
     * Retorna a lista de legendas selecionadas no {@link JList}
     * @param index
     */
    public boolean isLegendaSelecionada(int index) {
        return selecionadas.contains(index);
    }

    /**
     *
     * @return legendas selecionadas
     */
    public List<Legenda> getLegendasSelecionadas() {
        // legendas selecionadas
        List<Legenda> ls = new LinkedList<Legenda>();
        for (Integer integer : selecionadas) {
            ls.add(legendas.get(integer));
        }
        return ls;
    }

}
